package io.kblog.config

import io.kblog.support.JsonReturnHandler
import org.springframework.boot.autoconfigure.AutoConfiguration
import org.springframework.context.annotation.Bean
import org.springframework.web.method.support.HandlerMethodReturnValueHandler
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer

/**
 * Spring Boot自动配置类，用于配置Web MVC的返回值处理器。
 * 主要功能是添加自定义的JSON返回值处理器（JsonReturnHandler），同时保留原有默认处理器。
 */
@AutoConfiguration
open class KblogAutoConfiguration : WebMvcConfigurer {
    /**
     * 创建并返回JSON返回值处理器的Bean实例。
     *
     * @return JsonReturnHandler 处理返回值的JSON序列化的处理器
     */
    @Bean
    open fun jsonReturnHandler() = JsonReturnHandler()

    /**
     * 覆盖父类方法，将自定义的JSON返回处理器添加到处理程序列表。
     *
     * @param handlers Spring MVC的返回值处理器列表，用于处理方法返回值
     * @return 无返回值
     */
    override fun addReturnValueHandlers(handlers: MutableList<HandlerMethodReturnValueHandler>) {
        // 将自定义JSON返回处理器添加到列表，Spring Boot会自动合并原有处理器
        handlers.add(jsonReturnHandler()) // 自动保留原有处理器
    }
}

